<?php

class visitaLog extends Object{
    
    private $dados   = array();
    private $post    = array();
    private $old     = array();
    private $id      = "";
    private $changes = "";
    
    /**
     * Gera o Log de alterações de uma visita
     * @param array $model_dados   <p>Dados do Modelo</p>
     * @param array $dados_novos   <p>Novos valores salvos no banco de dados</p>
     * @param array $dados_antigos <p>Valores antigos que estavam no banco de dados</p>
     * @param int   $cod_visita    <p>Código da visita que está sendo salva no log</p>
     */
    public function LogVisita($model_dados, $dados_novos, $dados_antigos, $cod_visita){ 
        
        $this->init($model_dados, $dados_novos, $dados_antigos, $cod_visita);
        $this->removeFields();
        $this->genChanges();
        if($this->changes == "") return "";
        
        $text = $this->genText();
        $this->saveLog($text);
    }
    
    
    /**
     * Inicializa as variáveis da classe
     * @param array $dados_novos   <p>Novos valores salvos no banco de dados</p>
     * @param array $dados_antigos <p>Valores antigos que estavam no banco de dados</p>
     * @param int   $cod_visita    <p>Código da visita que está sendo salva no log</p>
     */
    private function init($dados, $post, $old, $id){
        
        $this->post  = $post;
        $this->old   = $old;
        $this->id    = $id;
        $this->dados = $dados;
    }

    /**
     * Remove os campos que não serão salvos no log
     */
    private function removeFields(){
        if(isset($this->post['cod_usuario']))               unset($this->post['cod_usuario']);
        if(isset($this->post['venda_equipe_cod']))          unset($this->post['venda_equipe_cod']);
        if(isset($this->post['venda_evento_cod']))          unset($this->post['venda_evento_cod']);
        if(isset($this->post['venda_empresa_cod']))         unset($this->post['venda_empresa_cod']);
        if(isset($this->post['venda_funcionario_cod']))     unset($this->post['venda_funcionario_cod']);
        if(isset($this->post['venda_contato_cod']))         unset($this->post['venda_contato_cod']);
        if(isset($this->post['venda_visita_bdstatus']))     unset($this->post['venda_visita_bdstatus']);
        if(isset($this->post['venda_visita_comparecerao'])) unset($this->post['venda_visita_comparecerao']);
    }
    
    /**
     * Gera uma string com as alterações realizadas na visita
     */
    private function genChanges(){
        $msg = "";
        foreach($this->post as $name => $arr){
            //verifica se o dado enviado existe no modelo
            if(!array_key_exists($name, $this->dados)) continue;
            
            //se o dado for um array, não é salvo
            if(is_array($arr)) continue;
            
            //se o dado atual é igual ao antigo não é salvo
            if($this->old[$name] == $arr) continue;
            if(isset($this->old["__$name"]) && $this->old["__$name"] == $arr) continue;
            
            //se o dado é vazio, não é salvo
            if($arr == "") continue;
            
            //adiciona dados à mensagem
            $title = $this->dados[$name]['name'];
            $msg .= "$title: $arr <br/>";
        }
        $this->changes = $msg;
    }
    
    /**
     * Gera uma string com o texto de log
     */
    public function genText(){
        $this->LoadResource('html', 'html');
        $link = $this->html->getLink("venda/visita/show/$this->id");
        $veja = "<a href='$link'>Ir para a Visita</a>";
        return ($this->old['__venda_visita_bdstatus'] != "saved")? 
                "Nova visita Adicionada: <br/> $this->changes $veja":
                "Modificações na visita:<br/> $this->changes $veja";
    }
    
    /**
     * Salva as alterações nas tabelas de log
     */
    public function saveLog($msg){
        if($msg == "") return;
        $this->LoadModel('venda/empresalog', 'elog');
        $this->LoadModel('venda/visitahist', 'vh');
            
        if(!$this->elog->Log($msg))
            $this->setAlertMessage($this->elog->getErrorMessage());
        elseif(!$this->vh->Log($msg, true))
            $this->setAlertMessage($this->vh->getErrorMessage());
    }
}

?>